<?php
namespace App\Services\User\Menu;

use App\Models\User\MenuCate;
class MenuCateLogic
{
    // 增加一个应用分类
    public function add(array $data): array
    {
        // 先查询一下有没有此分类
        if($this->_findByName($data['name'])){
            return verify_err($data, '分类英文名' . $data['name'] . '已经存在');
        }
        $data['status'] = '1';
        $res = MenuCate::insert($data);
        return auto_return($res, '成功增加一个应用分类', '增加一个应用分类');
    }
    // 根据一个分类的英文名称来查询是否有此分类
   private function _findByName(string $name)
    {
        $id = MenuCate::where('name','=',$name)->value('id');
        return $id > 0;
    }
    // 停止一个应用分类
   public function stop(array $data): array
    {
        $_where = make_map($data, ['id','name']);

        $res = MenuCate::where($_where)->update(['status'=>'0']);
        return auto_return($res, '成功停止一个应用分类', '停止一个应用分类失败');
    }
    // 获取某一应用所有的可用菜单分类列表(不分页)
    public function listByApp(array $data): array
    {
        $list = MenuCate::where([['app_id','=',$data['app_id']],['status','=',1]])->get()->toArray();
        return auto_return($list, '成功获取某一应用所有的可用菜单分类列', '获取某一应用所有的可用菜单分类列失败');
    }
    // 获取某一应用所有的可用菜单分类列表(不分页)
    public function listAllByApp(array $data): array
    {
        $_where['app_id'] = $data['app_id'];
        $list = MenuCate::where($_where)->get()->toArray();
        return auto_return($list, '成功获取某一应用所有的菜单分类列', '获取某一应用所有的菜单分类列失败');
    }
    // 获取所有可用菜单分类
    public function list(array $data): array
    {
        $list = MenuCate::leftJoin('app', 'menu_cate.app_id', '=', 'app.id')
            ->select('menu_cate.*', 'app.name')
            ->where('menu_cate.status','=',1)
            ->orderBy('menu_cate.app_id')
            ->paginate($data['list_rows'], null, null, $data['page'])
            ->toArray();
        return auto_return_page($list);
    }
    // 启动一个应用分类
    public function start(array $data): array
    {
        $_where = make_map($data, ['id', 'name']);
        $res = MenuCate::where($_where)->update(['status'=>'1']);
        return auto_return($res, '成功启动一个应用分类', '启动一个应用分类失败');
    }
    // 编辑一个应用分类
    public function edit(array $data): array
    {
        // 先查询一下有没有此分类
        $_where['id'] = $data['id'];
        $save = make_map($data, ['name', 'name_cn']);
        $res = MenuCate::where($_where)->update($save);
        return auto_return($res, '成功编辑一个应用分类', '编辑一个应用分类失败');
    }

}
